"""
Дополнительная обработка вакансий.
Нормализация телефонов. Нормализация названий организаций.
Удаление дублей организаций по названию и по номеру телефона.
Бан организаций по имени.
Поиск организаций в ЛЕКСЕМе по номеру телефона.
Поиск организаций в ЛЕКСЕМе по имени.
"""


import sys
# from time import time
#from PyQt5.QtCore import *
#from PyQt5.QtGui import *
# from PyQt5.QtWebKitWidgets import *
from PyQt5.QtSql import *
from PyQt5.QtWidgets import *

import logging                                                                  # запись логов
# import re                                                                       # регулярные выражения

if __name__ == '__main__':                                                      # ОСНОВНОЙ ЦИКЛ
    app = QApplication(sys.argv)

    logging.basicConfig(filename='log.txt',level=logging.DEBUG)


    dbIn = QSqlDatabase.addDatabase("QODBC")                                    # соедиение с лексемой
    dbIn.setDatabaseName("lexema")
    dbIn.setUserName("sa")
    dbIn.setPassword("5318")
    if not dbIn.open():
        print("")
        logging.error("нет соединения с MSSQL")
        quit()

    dbOut = QSqlDatabase.addDatabase("QMYSQL")                         # создаём новое соединение
    dbOut.setHostName("sserver")
    dbOut.setDatabaseName("crm")
    dbOut.setUserName("usercrm")
    dbOut.setPassword("passwdcrm")
    if not dbOut.open():
        print("")
        logging.error("нет соединения с MySQL")
        quit()

"""
  Code INT NOT NULL,
  Adres адрес
  Chief шеф
  Phone VARCHAR(255) NULL,
  Account р\с
  INN CHAR(30) NULL,
  OKONH CHAR(13) NULL,
  OKPO CHAR(13) NULL,
  Code_Bank INT NULL,
  Wdate DATETIME NOT NULL CONSTRAINT DF__Spr_Org__Wdate__334AA5B3 DEFAULT (GETDATE()),
  UserName SYSNAME NOT NULL CONSTRAINT DF__Spr_Org__UserNam__343EC9EC DEFAULT (USER_NAME()),
  fullname CHAR(255) NULL,
  Kategoria INT NULL,
  OldCode INT NULL,
  KPP CHAR(12) NULL,
  fax VARCHAR(20) NULL,
  email VARCHAR(200) NULL,
  www VARCHAR(200) NULL,
  kurator INT NULL,
  territor INT NULL,
  segment INT NULL,
  id_1c VARCHAR(10) NULL,
  text1 VARCHAR(50) NULL,
  rowid_1c INT NULL,
  FAdres1c VARCHAR(255) NULL,
  dop TEXT NULL,
  strana INT NULL,
  index1 VARCHAR(50) NULL,
  region INT NULL,
  gorod INT NULL,
  raj_gorod INT NULL,
  vidpunkt INT NULL,
  naspunkt INT NULL,
  vidulitsy INT NULL,
  ulitsa INT NULL,
  dom VARCHAR(10) NULL,
  korp VARCHAR(10) NULL,
  NOfis VARCHAR(50) NULL,
  tel1 VARCHAR(20) NULL,
  tel2 VARCHAR(20) NULL,
  tel3 VARCHAR(20) NULL,
  tel4 VARCHAR(20) NULL,
  tel5 VARCHAR(20) NULL,
  pemail VARCHAR(255) NULL,
  brand VARCHAR(50) NULL,
  group1 VARCHAR(50) NULL,
  group2 VARCHAR(50) NULL,
  group3 VARCHAR(50) NULL,
  group4 VARCHAR(50) NULL,
  group5 VARCHAR(150) NULL,
  group6 VARCHAR(50) NULL,
  group7 VARCHAR(50) NULL,
  group8 VARCHAR(50) NULL,
  group9 VARCHAR(50) NULL,
  group10 VARCHAR(50) NULL,
  group11 VARCHAR(50) NULL,
  group12 VARCHAR(50) NULL,
  group13 VARCHAR(50) NULL,
  group14 VARCHAR(50) NULL,
  group15 VARCHAR(50) NULL,
  group16 VARCHAR(50) NULL,
  group17 VARCHAR(50) NULL,
  group18 VARCHAR(50) NULL,
  group19 VARCHAR(50) NULL,
  group20 VARCHAR(50) NULL,
  datereg DATETIME NULL,
  sfera INT NULL,
  Ssfera INT NULL,
  Perspekt INT NULL,
  ist1 INT NULL,
  paramist1 VARCHAR(50) NULL,
  ist2 INT NULL,
  paramist2 VARCHAR(50) NULL,
  fsobstv INT NULL,
  razmer INT NULL,
  chisl INT NULL,
  atach INT NULL,
  ktime INT NULL,
  prim VARCHAR(200) NULL,
  status INT NULL,
  tpodatel INT NULL,
  asuorgid BIGINT NULL,
  changedate DATETIME NULL,
  OrgResume TEXT NULL,
  import INT NULL,
  prim2 VARCHAR(200) NULL,
  CONSTRAINT PK__Spr_Org__Code__7A280247 PRIMARY KEY (Code) WITH (FILLFACTOR = 90)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

q = QSqlQuery("select * from employees")
rec = q.record()

print "Number of columns: %d" % rec.count()

nameCol = rec.indexOf("name") # index of the field "name"
while q.next():
    print q.value(nameCol) # output all names
"""
    lexema = QSqlQuery(dbIn)
    sql = ("SELECT Code, Adres, INN, Account FROM dbo.Spr_Org")
                   
    logging.debug('поиск организации|{}|'.format(sql))
    lexema.exec(sql)
    lexema.next();                                                      # количество записей
"""
  name_legal VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'юридическое название',
  brand VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'бренд',
  name_payer VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'плательщик',
  name_find VARCHAR(50) NOT NULL DEFAULT '' COMMENT 'имя для поиска',

  address_legal VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'юридический адрес',
  address_real VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'физический адрес',
  address_post VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'почтовый адрес',

  inn VARCHAR(12) NOT NULL DEFAULT '' COMMENT 'ИНН',
  kpp VARCHAR(9) NOT NULL DEFAULT '' COMMENT 'КПП',
  account VARCHAR(20) NOT NULL DEFAULT '' COMMENT 'расчетный счет',
  okved VARCHAR(7) NOT NULL DEFAULT '' COMMENT 'ОКВЭД',
  okved_descript VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'уточнение ОКВЭД',
  ogrn VARCHAR(13) NOT NULL DEFAULT '' COMMENT 'ОГРН',
  bank VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'банк', 

  www VARCHAR(40) NOT NULL DEFAULT '' COMMENT 'www',

  status_id INT(10) UNSIGNED DEFAULT NULL COMMENT 'cтатус клиента',
  curator_id INT(10) UNSIGNED DEFAULT NULL COMMENT 'код куратора',

"""
    crm = QSqlQuery(dbOut)
    sql = ("INSERT INTO crm (address_legal,inn,bank) VALUES {},{},{};'.                   # в INSERT запрос
        format(lexema.value(1), lexema.value(2), lexema.value(3))
    crm.execute(sql)
    crm.commit()
    dbIn.close()
    QSqlDatabase.removeDatabase("QODBC")
    dbOut.close()
    QSqlDatabase.removeDatabase("QMYSQL")
